/*
 * Copyright (c) 2014. Jay R. Gindin
 */

package com.gindin.zmanim;

import com.gindin.zmanim.calendar.HebrewCalendar;
import com.gindin.zmanim.calendar.HebrewDate;
import com.gindin.zmanim.location.ZmanimLocation;
import com.gindin.zmanim.zman.Zman;
import com.gindin.zmanim.zman.Zmanim;
import org.junit.Assert;
import org.junit.Test;

import java.util.Calendar;
import java.util.List;
import java.util.TimeZone;

/**
 * This is a unit test, but also a helpful mechanism to dump out the tallit & tefilin times to help plan
 *  for winter month shachrit.
 */
@SuppressWarnings( { "MagicNumber", "SpellCheckingInspection" } )
public class UT_TalitTimes {

	private static final ZmanimLocation                       seattle;

	private static final ZmanimLocation                       yeshivaUniviersity;


	static {

		seattle = new ZmanimLocation.Builder()
			.atLatitude( 47.552827 )
			.atLongitude( -122.267065 )
			.locationName( "Ezra Bessaroth" )
			.inTimeZone( TimeZone.getTimeZone( "America/Los_Angeles" ) )
			.build();

		yeshivaUniviersity = new ZmanimLocation.Builder()
			.atLatitude( 40.851546 )
			.atLongitude( -73.928937 )
			.locationName( "Yeshiva University" )
			.inTimeZone( TimeZone.getTimeZone( "America/New_York" ) )
			.build();
	}

	
	@SuppressWarnings( "AutoBoxing" )
	@Test
	public void talitTimesForSeattle() {

		HebrewDate date = HebrewCalendar.getForDate( 2014, Calendar.OCTOBER, 15 );
		HebrewDate lastDate = HebrewCalendar.getForDate( 2015, Calendar.MARCH, 18 );

		StringBuilder output = new StringBuilder();
		output.append( "Date           |  10.2 deg   |   11 deg    |  11.5 deg   |\n" );
		output.append( "---------------|-------------|-------------|-------------|\n" );

		while ( lastDate.compareTo( date ) >= 0 ) {

			Zmanim zmanim = date.getZmanim( seattle, Zmanim.Type.Talit );
			List<Zman> zmans = zmanim.asList();

			output.append( String.format( "%d / %2d / %2d | ", date.getGregorianYear(), date.getGregorianMonth() + 1,
				date.getGregorianDayOfMonth() ) );
			for ( Zman zman : zmans ) {
				Calendar zmanTime = zman.getTime();
				output.append( String.format( "%2d:%02d:%02d", zmanTime.get( Calendar.HOUR_OF_DAY ),
					zmanTime.get( Calendar.MINUTE ), zmanTime.get( Calendar.SECOND ) ) );
				output.append( "    | " );
			}

			output.append( "\n" );
			date = date.tomorrow();
		}

		String expected =
			"Date           |  10.2 deg   |   11 deg    |  11.5 deg   |\n" +
			"---------------|-------------|-------------|-------------|\n" +
			"2014 / 10 / 15 |  6:31:39    |  6:26:54    |  6:23:56    | \n" +
			"2014 / 10 / 16 |  6:33:02    |  6:28:17    |  6:25:19    | \n" +
			"2014 / 10 / 17 |  6:34:25    |  6:29:40    |  6:26:42    | \n" +
			"2014 / 10 / 18 |  6:35:47    |  6:31:03    |  6:28:05    | \n" +
			"2014 / 10 / 19 |  6:37:10    |  6:32:25    |  6:29:27    | \n" +
			"2014 / 10 / 20 |  6:38:33    |  6:33:48    |  6:30:50    | \n" +
			"2014 / 10 / 21 |  6:39:56    |  6:35:11    |  6:32:13    | \n" +
			"2014 / 10 / 22 |  6:41:19    |  6:36:34    |  6:33:35    | \n" +
			"2014 / 10 / 23 |  6:42:42    |  6:37:56    |  6:34:58    | \n" +
			"2014 / 10 / 24 |  6:44:05    |  6:39:19    |  6:36:21    | \n" +
			"2014 / 10 / 25 |  6:45:28    |  6:40:42    |  6:37:43    | \n" +
			"2014 / 10 / 26 |  6:46:51    |  6:42:05    |  6:39:06    | \n" +
			"2014 / 10 / 27 |  6:48:14    |  6:43:27    |  6:40:28    | \n" +
			"2014 / 10 / 28 |  6:49:37    |  6:44:50    |  6:41:50    | \n" +
			"2014 / 10 / 29 |  6:51:00    |  6:46:12    |  6:43:13    | \n" +
			"2014 / 10 / 30 |  6:52:23    |  6:47:35    |  6:44:35    | \n" +
			"2014 / 10 / 31 |  6:53:45    |  6:48:57    |  6:45:57    | \n" +
			"2014 / 11 /  1 |  6:55:08    |  6:50:19    |  6:47:19    | \n" +
			"2014 / 11 /  2 |  5:56:31    |  5:51:42    |  5:48:41    | \n" +
			"2014 / 11 /  3 |  5:57:53    |  5:53:04    |  5:50:03    | \n" +
			"2014 / 11 /  4 |  5:59:16    |  5:54:26    |  5:51:25    | \n" +
			"2014 / 11 /  5 |  6:00:38    |  5:55:47    |  5:52:46    | \n" +
			"2014 / 11 /  6 |  6:02:00    |  5:57:09    |  5:54:07    | \n" +
			"2014 / 11 /  7 |  6:03:22    |  5:58:30    |  5:55:29    | \n" +
			"2014 / 11 /  8 |  6:04:43    |  5:59:51    |  5:56:49    | \n" +
			"2014 / 11 /  9 |  6:06:05    |  6:01:12    |  5:58:10    | \n" +
			"2014 / 11 / 10 |  6:07:26    |  6:02:33    |  5:59:30    | \n" +
			"2014 / 11 / 11 |  6:08:47    |  6:03:53    |  6:00:50    | \n" +
			"2014 / 11 / 12 |  6:10:07    |  6:05:13    |  6:02:10    | \n" +
			"2014 / 11 / 13 |  6:11:27    |  6:06:33    |  6:03:29    | \n" +
			"2014 / 11 / 14 |  6:12:47    |  6:07:52    |  6:04:48    | \n" +
			"2014 / 11 / 15 |  6:14:07    |  6:09:11    |  6:06:07    | \n" +
			"2014 / 11 / 16 |  6:15:25    |  6:10:29    |  6:07:25    | \n" +
			"2014 / 11 / 17 |  6:16:44    |  6:11:47    |  6:08:42    | \n" +
			"2014 / 11 / 18 |  6:18:02    |  6:13:04    |  6:09:59    | \n" +
			"2014 / 11 / 19 |  6:19:19    |  6:14:21    |  6:11:15    | \n" +
			"2014 / 11 / 20 |  6:20:35    |  6:15:37    |  6:12:31    | \n" +
			"2014 / 11 / 21 |  6:21:51    |  6:16:52    |  6:13:46    | \n" +
			"2014 / 11 / 22 |  6:23:07    |  6:18:07    |  6:15:00    | \n" +
			"2014 / 11 / 23 |  6:24:21    |  6:19:21    |  6:16:14    | \n" +
			"2014 / 11 / 24 |  6:25:35    |  6:20:34    |  6:17:27    | \n" +
			"2014 / 11 / 25 |  6:26:47    |  6:21:46    |  6:18:38    | \n" +
			"2014 / 11 / 26 |  6:27:59    |  6:22:57    |  6:19:50    | \n" +
			"2014 / 11 / 27 |  6:29:10    |  6:24:08    |  6:21:00    | \n" +
			"2014 / 11 / 28 |  6:30:20    |  6:25:17    |  6:22:09    | \n" +
			"2014 / 11 / 29 |  6:31:29    |  6:26:25    |  6:23:17    | \n" +
			"2014 / 11 / 30 |  6:32:37    |  6:27:33    |  6:24:24    | \n" +
			"2014 / 12 /  1 |  6:33:43    |  6:28:39    |  6:25:29    | \n" +
			"2014 / 12 /  2 |  6:34:48    |  6:29:44    |  6:26:34    | \n" +
			"2014 / 12 /  3 |  6:35:52    |  6:30:47    |  6:27:37    | \n" +
			"2014 / 12 /  4 |  6:36:55    |  6:31:49    |  6:28:39    | \n" +
			"2014 / 12 /  5 |  6:37:56    |  6:32:50    |  6:29:40    | \n" +
			"2014 / 12 /  6 |  6:38:56    |  6:33:50    |  6:30:39    | \n" +
			"2014 / 12 /  7 |  6:39:55    |  6:34:48    |  6:31:37    | \n" +
			"2014 / 12 /  8 |  6:40:52    |  6:35:44    |  6:32:33    | \n" +
			"2014 / 12 /  9 |  6:41:47    |  6:36:39    |  6:33:28    | \n" +
			"2014 / 12 / 10 |  6:42:40    |  6:37:33    |  6:34:21    | \n" +
			"2014 / 12 / 11 |  6:43:32    |  6:38:24    |  6:35:13    | \n" +
			"2014 / 12 / 12 |  6:44:23    |  6:39:14    |  6:36:02    | \n" +
			"2014 / 12 / 13 |  6:45:11    |  6:40:02    |  6:36:50    | \n" +
			"2014 / 12 / 14 |  6:45:57    |  6:40:48    |  6:37:36    | \n" +
			"2014 / 12 / 15 |  6:46:42    |  6:41:33    |  6:38:21    | \n" +
			"2014 / 12 / 16 |  6:47:25    |  6:42:15    |  6:39:03    | \n" +
			"2014 / 12 / 17 |  6:48:05    |  6:42:56    |  6:39:43    | \n" +
			"2014 / 12 / 18 |  6:48:44    |  6:43:34    |  6:40:22    | \n" +
			"2014 / 12 / 19 |  6:49:20    |  6:44:11    |  6:40:58    | \n" +
			"2014 / 12 / 20 |  6:49:55    |  6:44:45    |  6:41:33    | \n" +
			"2014 / 12 / 21 |  6:50:27    |  6:45:17    |  6:42:05    | \n" +
			"2014 / 12 / 22 |  6:50:57    |  6:45:47    |  6:42:35    | \n" +
			"2014 / 12 / 23 |  6:51:25    |  6:46:15    |  6:43:03    | \n" +
			"2014 / 12 / 24 |  6:51:50    |  6:46:41    |  6:43:28    | \n" +
			"2014 / 12 / 25 |  6:52:14    |  6:47:04    |  6:43:52    | \n" +
			"2014 / 12 / 26 |  6:52:35    |  6:47:25    |  6:44:13    | \n" +
			"2014 / 12 / 27 |  6:52:53    |  6:47:44    |  6:44:32    | \n" +
			"2014 / 12 / 28 |  6:53:09    |  6:48:00    |  6:44:48    | \n" +
			"2014 / 12 / 29 |  6:53:23    |  6:48:14    |  6:45:02    | \n" +
			"2014 / 12 / 30 |  6:53:34    |  6:48:26    |  6:45:14    | \n" +
			"2014 / 12 / 31 |  6:53:43    |  6:48:35    |  6:45:23    | \n" +
			"2015 /  1 /  1 |  6:53:56    |  6:48:47    |  6:45:36    | \n" +
			"2015 /  1 /  2 |  6:53:59    |  6:48:51    |  6:45:40    | \n" +
			"2015 /  1 /  3 |  6:54:00    |  6:48:52    |  6:45:41    | \n" +
			"2015 /  1 /  4 |  6:53:58    |  6:48:51    |  6:45:40    | \n" +
			"2015 /  1 /  5 |  6:53:54    |  6:48:47    |  6:45:36    | \n" +
			"2015 /  1 /  6 |  6:53:47    |  6:48:41    |  6:45:30    | \n" +
			"2015 /  1 /  7 |  6:53:38    |  6:48:32    |  6:45:22    | \n" +
			"2015 /  1 /  8 |  6:53:27    |  6:48:21    |  6:45:11    | \n" +
			"2015 /  1 /  9 |  6:53:13    |  6:48:07    |  6:44:57    | \n" +
			"2015 /  1 / 10 |  6:52:56    |  6:47:51    |  6:44:42    | \n" +
			"2015 /  1 / 11 |  6:52:37    |  6:47:32    |  6:44:23    | \n" +
			"2015 /  1 / 12 |  6:52:15    |  6:47:11    |  6:44:02    | \n" +
			"2015 /  1 / 13 |  6:51:51    |  6:46:48    |  6:43:39    | \n" +
			"2015 /  1 / 14 |  6:51:25    |  6:46:22    |  6:43:13    | \n" +
			"2015 /  1 / 15 |  6:50:56    |  6:45:53    |  6:42:45    | \n" +
			"2015 /  1 / 16 |  6:50:24    |  6:45:22    |  6:42:15    | \n" +
			"2015 /  1 / 17 |  6:49:50    |  6:44:49    |  6:41:42    | \n" +
			"2015 /  1 / 18 |  6:49:14    |  6:44:13    |  6:41:06    | \n" +
			"2015 /  1 / 19 |  6:48:36    |  6:43:35    |  6:40:29    | \n" +
			"2015 /  1 / 20 |  6:47:55    |  6:42:55    |  6:39:49    | \n" +
			"2015 /  1 / 21 |  6:47:11    |  6:42:12    |  6:39:06    | \n" +
			"2015 /  1 / 22 |  6:46:26    |  6:41:27    |  6:38:21    | \n" +
			"2015 /  1 / 23 |  6:45:38    |  6:40:40    |  6:37:34    | \n" +
			"2015 /  1 / 24 |  6:44:48    |  6:39:50    |  6:36:45    | \n" +
			"2015 /  1 / 25 |  6:43:55    |  6:38:59    |  6:35:54    | \n" +
			"2015 /  1 / 26 |  6:43:01    |  6:38:05    |  6:35:00    | \n" +
			"2015 /  1 / 27 |  6:42:04    |  6:37:08    |  6:34:04    | \n" +
			"2015 /  1 / 28 |  6:41:05    |  6:36:10    |  6:33:06    | \n" +
			"2015 /  1 / 29 |  6:40:04    |  6:35:10    |  6:32:06    | \n" +
			"2015 /  1 / 30 |  6:39:01    |  6:34:07    |  6:31:04    | \n" +
			"2015 /  1 / 31 |  6:37:56    |  6:33:02    |  6:30:00    | \n" +
			"2015 /  2 /  1 |  6:36:49    |  6:31:56    |  6:28:53    | \n" +
			"2015 /  2 /  2 |  6:35:40    |  6:30:47    |  6:27:45    | \n" +
			"2015 /  2 /  3 |  6:34:28    |  6:29:37    |  6:26:35    | \n" +
			"2015 /  2 /  4 |  6:33:15    |  6:28:24    |  6:25:22    | \n" +
			"2015 /  2 /  5 |  6:32:01    |  6:27:10    |  6:24:08    | \n" +
			"2015 /  2 /  6 |  6:30:44    |  6:25:53    |  6:22:52    | \n" +
			"2015 /  2 /  7 |  6:29:25    |  6:24:35    |  6:21:34    | \n" +
			"2015 /  2 /  8 |  6:28:05    |  6:23:15    |  6:20:15    | \n" +
			"2015 /  2 /  9 |  6:26:43    |  6:21:54    |  6:18:53    | \n" +
			"2015 /  2 / 10 |  6:25:19    |  6:20:30    |  6:17:30    | \n" +
			"2015 /  2 / 11 |  6:23:53    |  6:19:05    |  6:16:05    | \n" +
			"2015 /  2 / 12 |  6:22:26    |  6:17:38    |  6:14:39    | \n" +
			"2015 /  2 / 13 |  6:20:57    |  6:16:10    |  6:13:10    | \n" +
			"2015 /  2 / 14 |  6:19:27    |  6:14:40    |  6:11:40    | \n" +
			"2015 /  2 / 15 |  6:17:55    |  6:13:08    |  6:10:09    | \n" +
			"2015 /  2 / 16 |  6:16:21    |  6:11:35    |  6:08:36    | \n" +
			"2015 /  2 / 17 |  6:14:46    |  6:10:00    |  6:07:02    | \n" +
			"2015 /  2 / 18 |  6:13:10    |  6:08:24    |  6:05:26    | \n" +
			"2015 /  2 / 19 |  6:11:32    |  6:06:46    |  6:03:48    | \n" +
			"2015 /  2 / 20 |  6:09:53    |  6:05:07    |  6:02:09    | \n" +
			"2015 /  2 / 21 |  6:08:12    |  6:03:27    |  6:00:29    | \n" +
			"2015 /  2 / 22 |  6:06:30    |  6:01:45    |  5:58:47    | \n" +
			"2015 /  2 / 23 |  6:04:47    |  6:00:02    |  5:57:05    | \n" +
			"2015 /  2 / 24 |  6:03:03    |  5:58:18    |  5:55:20    | \n" +
			"2015 /  2 / 25 |  6:01:17    |  5:56:33    |  5:53:35    | \n" +
			"2015 /  2 / 26 |  5:59:31    |  5:54:46    |  5:51:48    | \n" +
			"2015 /  2 / 27 |  5:57:43    |  5:52:58    |  5:50:00    | \n" +
			"2015 /  2 / 28 |  5:55:54    |  5:51:09    |  5:48:11    | \n" +
			"2015 /  3 /  1 |  5:54:04    |  5:49:19    |  5:46:21    | \n" +
			"2015 /  3 /  2 |  5:52:12    |  5:47:28    |  5:44:30    | \n" +
			"2015 /  3 /  3 |  5:50:20    |  5:45:36    |  5:42:38    | \n" +
			"2015 /  3 /  4 |  5:48:27    |  5:43:42    |  5:40:44    | \n" +
			"2015 /  3 /  5 |  5:46:33    |  5:41:48    |  5:38:50    | \n" +
			"2015 /  3 /  6 |  5:44:38    |  5:39:53    |  5:36:55    | \n" +
			"2015 /  3 /  7 |  5:42:42    |  5:37:57    |  5:34:59    | \n" +
			"2015 /  3 /  8 |  6:40:45    |  6:36:00    |  6:33:01    | \n" +
			"2015 /  3 /  9 |  6:38:48    |  6:34:02    |  6:31:03    | \n" +
			"2015 /  3 / 10 |  6:36:49    |  6:32:03    |  6:29:04    | \n" +
			"2015 /  3 / 11 |  6:34:50    |  6:30:04    |  6:27:05    | \n" +
			"2015 /  3 / 12 |  6:32:50    |  6:28:03    |  6:25:04    | \n" +
			"2015 /  3 / 13 |  6:30:49    |  6:26:02    |  6:23:03    | \n" +
			"2015 /  3 / 14 |  6:28:48    |  6:24:01    |  6:21:01    | \n" +
			"2015 /  3 / 15 |  6:26:46    |  6:21:58    |  6:18:58    | \n" +
			"2015 /  3 / 16 |  6:24:43    |  6:19:55    |  6:16:55    | \n" +
			"2015 /  3 / 17 |  6:22:40    |  6:17:51    |  6:14:51    | \n" +
			"2015 /  3 / 18 |  6:20:36    |  6:15:47    |  6:12:46    | \n";

		Assert.assertEquals( expected, output.toString() );
	}


	@SuppressWarnings( "AutoBoxing" )
	@Test
	public void talitTimesForYeshivaUniversity() {

		HebrewDate date = HebrewCalendar.getForDate( 2014, Calendar.OCTOBER, 15 );
		HebrewDate lastDate = HebrewCalendar.getForDate( 2015, Calendar.MARCH, 18 );

		StringBuilder output = new StringBuilder();
		output.append( "Date           |  10.2 deg   |   11 deg    |  11.5 deg   |\n" );
		output.append( "---------------|-------------|-------------|-------------|\n" );

		while ( lastDate.compareTo( date ) >= 0 ) {

			Zmanim zmanim = date.getZmanim( yeshivaUniviersity, Zmanim.Type.Talit );
			List<Zman> zmans = zmanim.asList();

			output.append( String.format( "%d / %2d / %2d | ", date.getGregorianYear(), date.getGregorianMonth() + 1,
				date.getGregorianDayOfMonth() ) );
			for ( Zman zman : zmans ) {
				Calendar zmanTime = zman.getTime();
				output.append( String.format( "%2d:%02d:%02d", zmanTime.get( Calendar.HOUR_OF_DAY ),
					zmanTime.get( Calendar.MINUTE ), zmanTime.get( Calendar.SECOND ) ) );
				output.append( "    | " );
			}

			output.append( "\n" );
			date = date.tomorrow();
		}

		String expected =
			"Date           |  10.2 deg   |   11 deg    |  11.5 deg   |\n" +
			"---------------|-------------|-------------|-------------|\n" +
			"2014 / 10 / 15 |  6:16:50    |  6:12:36    |  6:09:58    | \n" +
			"2014 / 10 / 16 |  6:17:53    |  6:13:39    |  6:11:00    | \n" +
			"2014 / 10 / 17 |  6:18:56    |  6:14:41    |  6:12:03    | \n" +
			"2014 / 10 / 18 |  6:19:58    |  6:15:44    |  6:13:05    | \n" +
			"2014 / 10 / 19 |  6:21:01    |  6:16:47    |  6:14:08    | \n" +
			"2014 / 10 / 20 |  6:22:04    |  6:17:50    |  6:15:11    | \n" +
			"2014 / 10 / 21 |  6:23:07    |  6:18:53    |  6:16:13    | \n" +
			"2014 / 10 / 22 |  6:24:11    |  6:19:56    |  6:17:16    | \n" +
			"2014 / 10 / 23 |  6:25:14    |  6:20:59    |  6:18:19    | \n" +
			"2014 / 10 / 24 |  6:26:18    |  6:22:02    |  6:19:23    | \n" +
			"2014 / 10 / 25 |  6:27:21    |  6:23:06    |  6:20:26    | \n" +
			"2014 / 10 / 26 |  6:28:25    |  6:24:09    |  6:21:29    | \n" +
			"2014 / 10 / 27 |  6:29:29    |  6:25:13    |  6:22:33    | \n" +
			"2014 / 10 / 28 |  6:30:33    |  6:26:16    |  6:23:36    | \n" +
			"2014 / 10 / 29 |  6:31:37    |  6:27:20    |  6:24:40    | \n" +
			"2014 / 10 / 30 |  6:32:41    |  6:28:24    |  6:25:44    | \n" +
			"2014 / 10 / 31 |  6:33:46    |  6:29:28    |  6:26:48    | \n" +
			"2014 / 11 /  1 |  6:34:50    |  6:30:32    |  6:27:52    | \n" +
			"2014 / 11 /  2 |  5:35:55    |  5:31:37    |  5:28:56    | \n" +
			"2014 / 11 /  3 |  5:36:59    |  5:32:41    |  5:30:00    | \n" +
			"2014 / 11 /  4 |  5:38:04    |  5:33:45    |  5:31:04    | \n" +
			"2014 / 11 /  5 |  5:39:09    |  5:34:50    |  5:32:08    | \n" +
			"2014 / 11 /  6 |  5:40:13    |  5:35:54    |  5:33:12    | \n" +
			"2014 / 11 /  7 |  5:41:18    |  5:36:58    |  5:34:16    | \n" +
			"2014 / 11 /  8 |  5:42:23    |  5:38:03    |  5:35:20    | \n" +
			"2014 / 11 /  9 |  5:43:28    |  5:39:07    |  5:36:24    | \n" +
			"2014 / 11 / 10 |  5:44:32    |  5:40:11    |  5:37:28    | \n" +
			"2014 / 11 / 11 |  5:45:37    |  5:41:15    |  5:38:32    | \n" +
			"2014 / 11 / 12 |  5:46:41    |  5:42:19    |  5:39:36    | \n" +
			"2014 / 11 / 13 |  5:47:46    |  5:43:23    |  5:40:40    | \n" +
			"2014 / 11 / 14 |  5:48:50    |  5:44:27    |  5:41:43    | \n" +
			"2014 / 11 / 15 |  5:49:54    |  5:45:31    |  5:42:47    | \n" +
			"2014 / 11 / 16 |  5:50:58    |  5:46:34    |  5:43:50    | \n" +
			"2014 / 11 / 17 |  5:52:01    |  5:47:37    |  5:44:53    | \n" +
			"2014 / 11 / 18 |  5:53:05    |  5:48:40    |  5:45:55    | \n" +
			"2014 / 11 / 19 |  5:54:08    |  5:49:43    |  5:46:58    | \n" +
			"2014 / 11 / 20 |  5:55:11    |  5:50:45    |  5:48:00    | \n" +
			"2014 / 11 / 21 |  5:56:13    |  5:51:47    |  5:49:02    | \n" +
			"2014 / 11 / 22 |  5:57:15    |  5:52:49    |  5:50:03    | \n" +
			"2014 / 11 / 23 |  5:58:16    |  5:53:50    |  5:51:04    | \n" +
			"2014 / 11 / 24 |  5:59:18    |  5:54:51    |  5:52:04    | \n" +
			"2014 / 11 / 25 |  6:00:18    |  5:55:51    |  5:53:04    | \n" +
			"2014 / 11 / 26 |  6:01:18    |  5:56:50    |  5:54:04    | \n" +
			"2014 / 11 / 27 |  6:02:18    |  5:57:49    |  5:55:02    | \n" +
			"2014 / 11 / 28 |  6:03:16    |  5:58:48    |  5:56:01    | \n" +
			"2014 / 11 / 29 |  6:04:14    |  5:59:46    |  5:56:58    | \n" +
			"2014 / 11 / 30 |  6:05:12    |  6:00:43    |  5:57:55    | \n" +
			"2014 / 12 /  1 |  6:06:09    |  6:01:39    |  5:58:51    | \n" +
			"2014 / 12 /  2 |  6:07:04    |  6:02:34    |  5:59:46    | \n" +
			"2014 / 12 /  3 |  6:07:59    |  6:03:29    |  6:00:41    | \n" +
			"2014 / 12 /  4 |  6:08:53    |  6:04:23    |  6:01:34    | \n" +
			"2014 / 12 /  5 |  6:09:47    |  6:05:16    |  6:02:27    | \n" +
			"2014 / 12 /  6 |  6:10:39    |  6:06:07    |  6:03:19    | \n" +
			"2014 / 12 /  7 |  6:11:30    |  6:06:58    |  6:04:09    | \n" +
			"2014 / 12 /  8 |  6:12:20    |  6:07:48    |  6:04:59    | \n" +
			"2014 / 12 /  9 |  6:13:09    |  6:08:37    |  6:05:47    | \n" +
			"2014 / 12 / 10 |  6:13:56    |  6:09:24    |  6:06:35    | \n" +
			"2014 / 12 / 11 |  6:14:43    |  6:10:10    |  6:07:21    | \n" +
			"2014 / 12 / 12 |  6:15:28    |  6:10:55    |  6:08:06    | \n" +
			"2014 / 12 / 13 |  6:16:12    |  6:11:39    |  6:08:49    | \n" +
			"2014 / 12 / 14 |  6:16:55    |  6:12:22    |  6:09:32    | \n" +
			"2014 / 12 / 15 |  6:17:36    |  6:13:03    |  6:10:13    | \n" +
			"2014 / 12 / 16 |  6:18:15    |  6:13:42    |  6:10:52    | \n" +
			"2014 / 12 / 17 |  6:18:54    |  6:14:20    |  6:11:30    | \n" +
			"2014 / 12 / 18 |  6:19:30    |  6:14:57    |  6:12:07    | \n" +
			"2014 / 12 / 19 |  6:20:06    |  6:15:32    |  6:12:42    | \n" +
			"2014 / 12 / 20 |  6:20:39    |  6:16:06    |  6:13:15    | \n" +
			"2014 / 12 / 21 |  6:21:11    |  6:16:37    |  6:13:47    | \n" +
			"2014 / 12 / 22 |  6:21:41    |  6:17:08    |  6:14:17    | \n" +
			"2014 / 12 / 23 |  6:22:10    |  6:17:36    |  6:14:46    | \n" +
			"2014 / 12 / 24 |  6:22:36    |  6:18:03    |  6:15:13    | \n" +
			"2014 / 12 / 25 |  6:23:01    |  6:18:28    |  6:15:38    | \n" +
			"2014 / 12 / 26 |  6:23:25    |  6:18:51    |  6:16:01    | \n" +
			"2014 / 12 / 27 |  6:23:46    |  6:19:13    |  6:16:22    | \n" +
			"2014 / 12 / 28 |  6:24:05    |  6:19:32    |  6:16:42    | \n" +
			"2014 / 12 / 29 |  6:24:23    |  6:19:50    |  6:17:00    | \n" +
			"2014 / 12 / 30 |  6:24:39    |  6:20:06    |  6:17:16    | \n" +
			"2014 / 12 / 31 |  6:24:52    |  6:20:20    |  6:17:30    | \n" +
			"2015 /  1 /  1 |  6:25:11    |  6:20:39    |  6:17:49    | \n" +
			"2015 /  1 /  2 |  6:25:20    |  6:20:48    |  6:17:59    | \n" +
			"2015 /  1 /  3 |  6:25:28    |  6:20:56    |  6:18:06    | \n" +
			"2015 /  1 /  4 |  6:25:33    |  6:21:01    |  6:18:12    | \n" +
			"2015 /  1 /  5 |  6:25:36    |  6:21:04    |  6:18:15    | \n" +
			"2015 /  1 /  6 |  6:25:37    |  6:21:06    |  6:18:17    | \n" +
			"2015 /  1 /  7 |  6:25:36    |  6:21:05    |  6:18:17    | \n" +
			"2015 /  1 /  8 |  6:25:33    |  6:21:03    |  6:18:14    | \n" +
			"2015 /  1 /  9 |  6:25:28    |  6:20:58    |  6:18:10    | \n" +
			"2015 /  1 / 10 |  6:25:21    |  6:20:51    |  6:18:03    | \n" +
			"2015 /  1 / 11 |  6:25:12    |  6:20:42    |  6:17:54    | \n" +
			"2015 /  1 / 12 |  6:25:01    |  6:20:32    |  6:17:44    | \n" +
			"2015 /  1 / 13 |  6:24:48    |  6:20:19    |  6:17:31    | \n" +
			"2015 /  1 / 14 |  6:24:32    |  6:20:04    |  6:17:16    | \n" +
			"2015 /  1 / 15 |  6:24:15    |  6:19:47    |  6:17:00    | \n" +
			"2015 /  1 / 16 |  6:23:55    |  6:19:28    |  6:16:41    | \n" +
			"2015 /  1 / 17 |  6:23:34    |  6:19:06    |  6:16:20    | \n" +
			"2015 /  1 / 18 |  6:23:10    |  6:18:43    |  6:15:57    | \n" +
			"2015 /  1 / 19 |  6:22:45    |  6:18:18    |  6:15:32    | \n" +
			"2015 /  1 / 20 |  6:22:17    |  6:17:51    |  6:15:05    | \n" +
			"2015 /  1 / 21 |  6:21:48    |  6:17:22    |  6:14:36    | \n" +
			"2015 /  1 / 22 |  6:21:16    |  6:16:51    |  6:14:05    | \n" +
			"2015 /  1 / 23 |  6:20:42    |  6:16:18    |  6:13:32    | \n" +
			"2015 /  1 / 24 |  6:20:07    |  6:15:42    |  6:12:58    | \n" +
			"2015 /  1 / 25 |  6:19:29    |  6:15:05    |  6:12:21    | \n" +
			"2015 /  1 / 26 |  6:18:50    |  6:14:26    |  6:11:42    | \n" +
			"2015 /  1 / 27 |  6:18:09    |  6:13:46    |  6:11:02    | \n" +
			"2015 /  1 / 28 |  6:17:26    |  6:13:03    |  6:10:19    | \n" +
			"2015 /  1 / 29 |  6:16:41    |  6:12:18    |  6:09:35    | \n" +
			"2015 /  1 / 30 |  6:15:54    |  6:11:32    |  6:08:49    | \n" +
			"2015 /  1 / 31 |  6:15:05    |  6:10:44    |  6:08:01    | \n" +
			"2015 /  2 /  1 |  6:14:15    |  6:09:54    |  6:07:11    | \n" +
			"2015 /  2 /  2 |  6:13:23    |  6:09:02    |  6:06:19    | \n" +
			"2015 /  2 /  3 |  6:12:29    |  6:08:08    |  6:05:26    | \n" +
			"2015 /  2 /  4 |  6:11:33    |  6:07:13    |  6:04:31    | \n" +
			"2015 /  2 /  5 |  6:10:36    |  6:06:16    |  6:03:34    | \n" +
			"2015 /  2 /  6 |  6:09:37    |  6:05:18    |  6:02:36    | \n" +
			"2015 /  2 /  7 |  6:08:36    |  6:04:17    |  6:01:36    | \n" +
			"2015 /  2 /  8 |  6:07:34    |  6:03:15    |  6:00:34    | \n" +
			"2015 /  2 /  9 |  6:06:30    |  6:02:12    |  5:59:31    | \n" +
			"2015 /  2 / 10 |  6:05:25    |  6:01:07    |  5:58:26    | \n" +
			"2015 /  2 / 11 |  6:04:18    |  6:00:00    |  5:57:20    | \n" +
			"2015 /  2 / 12 |  6:03:09    |  5:58:52    |  5:56:12    | \n" +
			"2015 /  2 / 13 |  6:02:00    |  5:57:43    |  5:55:03    | \n" +
			"2015 /  2 / 14 |  6:00:48    |  5:56:32    |  5:53:52    | \n" +
			"2015 /  2 / 15 |  5:59:36    |  5:55:20    |  5:52:40    | \n" +
			"2015 /  2 / 16 |  5:58:22    |  5:54:06    |  5:51:26    | \n" +
			"2015 /  2 / 17 |  5:57:06    |  5:52:51    |  5:50:11    | \n" +
			"2015 /  2 / 18 |  5:55:50    |  5:51:34    |  5:48:55    | \n" +
			"2015 /  2 / 19 |  5:54:32    |  5:50:17    |  5:47:37    | \n" +
			"2015 /  2 / 20 |  5:53:13    |  5:48:58    |  5:46:19    | \n" +
			"2015 /  2 / 21 |  5:51:52    |  5:47:38    |  5:44:58    | \n" +
			"2015 /  2 / 22 |  5:50:31    |  5:46:16    |  5:43:37    | \n" +
			"2015 /  2 / 23 |  5:49:08    |  5:44:54    |  5:42:15    | \n" +
			"2015 /  2 / 24 |  5:47:44    |  5:43:30    |  5:40:51    | \n" +
			"2015 /  2 / 25 |  5:46:19    |  5:42:05    |  5:39:26    | \n" +
			"2015 /  2 / 26 |  5:44:53    |  5:40:39    |  5:38:00    | \n" +
			"2015 /  2 / 27 |  5:43:26    |  5:39:12    |  5:36:33    | \n" +
			"2015 /  2 / 28 |  5:41:58    |  5:37:44    |  5:35:06    | \n" +
			"2015 /  3 /  1 |  5:40:29    |  5:36:15    |  5:33:37    | \n" +
			"2015 /  3 /  2 |  5:38:59    |  5:34:45    |  5:32:07    | \n" +
			"2015 /  3 /  3 |  5:37:28    |  5:33:14    |  5:30:36    | \n" +
			"2015 /  3 /  4 |  5:35:56    |  5:31:43    |  5:29:04    | \n" +
			"2015 /  3 /  5 |  5:34:24    |  5:30:10    |  5:27:31    | \n" +
			"2015 /  3 /  6 |  5:32:50    |  5:28:36    |  5:25:58    | \n" +
			"2015 /  3 /  7 |  5:31:16    |  5:27:02    |  5:24:23    | \n" +
			"2015 /  3 /  8 |  6:29:41    |  6:25:27    |  6:22:48    | \n" +
			"2015 /  3 /  9 |  6:28:05    |  6:23:51    |  6:21:12    | \n" +
			"2015 /  3 / 10 |  6:26:29    |  6:22:15    |  6:19:36    | \n" +
			"2015 /  3 / 11 |  6:24:52    |  6:20:37    |  6:17:58    | \n" +
			"2015 /  3 / 12 |  6:23:14    |  6:18:59    |  6:16:20    | \n" +
			"2015 /  3 / 13 |  6:21:36    |  6:17:21    |  6:14:41    | \n" +
			"2015 /  3 / 14 |  6:19:57    |  6:15:42    |  6:13:02    | \n" +
			"2015 /  3 / 15 |  6:18:17    |  6:14:02    |  6:11:22    | \n" +
			"2015 /  3 / 16 |  6:16:37    |  6:12:22    |  6:09:42    | \n" +
			"2015 /  3 / 17 |  6:14:57    |  6:10:41    |  6:08:01    | \n" +
			"2015 /  3 / 18 |  6:13:16    |  6:09:00    |  6:06:19    | \n";

		Assert.assertEquals( expected, output.toString() );

	}
} // End of UT_TalitForSeattle class
